// 数组
// let newList = [1, 2, 3].push(4)

// console.log(newList.push(5))





const emojis = ['✨', '🥑', '😍']

emojis.map(x => x + '✨')
emojis.filter(x => x !== '🥑')
emojis.find(x => x !== '🥑')
emojis.reduce((acc, cur) => acc + '✨')
emojis.slice(1, 2, '✨') 
emojis.splice(1, 2, '✨') 







arr.push(Elements)
//1、push
    // 功能：数组末尾新增
    // 参数：要新增的数据
    // 返回值：新增之后的数组长度
    // 是否改变原数组：是
arr.unshift(Elements)
//2、unshift
    // 功能：数组开头新增
    // 参数：要新增的数据
    // 返回值：新增之后的数组长度
    // 是否改变原数组：是
arr.pop()
//3、pop
    // 功能：删除末尾
    // 参数：无参数
    // 返回值：从数组中删除的元素（当数组为空时返回undefined）
    // 是否改变原数组：是
arr.shift()
//4、shift
    // 功能：删除首位
    // 参数：无参数
    // 返回值：从数组中删除的元素（当数组为空时返回undefined）
    // 是否改变原数组：是
arr.reverse()
//5、reverse
    // 功能：翻转数组
    // 参数：无参数
    // 返回值：颠倒后的数组
    // 是否改变原数组：是
arr1.concat(arr2)
//6、concat
    // 功能：方法用于合并两个或多个数组
    // 参数：数组/值
    // 返回值：新的 Array 实例
    // 是否改变原数组：否
arr.join(separator)
//7、join
    // 功能：数组转字符串
    // 参数：separator指定一个字符串来分隔数组的每个元素，如果为""则所有元素之间都没有任何字符。
    // 返回值：一个所有数组元素连接的字符串
    // 是否改变原数组：否
arr.from(arrayLike, (element, index) => { /* … */ } )
//8、from
    // 功能：字符串转数组，伪数组转数组
    // 参数：arrayLike（伪数组，或字符串）
    // 返回值：一个新的数组实例
    // 是否改变原数组：否
arr.includes(searchElement, fromIndex)
//9、includes
    // 功能：数组中是否包含指定的值
    // 参数：searchElement（要查找的元素），fromIndex（可选参数，从fromInde索引处开始查找）
    // 返回值：返回一个布尔值
    // 是否改变原数组：否
arr.indexOf(searchElement, fromIndex)
//10、indexOf
    // 功能：查找对应第一个元素的索引，如果不存在，则返回 -1
    // 参数：searchElement（要查找的元素），fromIndex（开始查找的位置）
    // 返回值：首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
    // 是否改变原数组：否
arr.lastIndexOf(searchElement, fromIndex)
//11、lastIndexOf
    // 功能：从数组的后面向前查找对应倒数第一个元素的索引，如果不存在，则返回 -1
    // 参数：searchElement（要查找的元素），fromIndex（开始查找的位置）
    // 返回值：首个被找到的元素在数组中的索引位置; 若没有找到则返回 -1
    // 是否改变原数组：否
arr.slice(start, end)
//12、slice
    // 功能：截取指定的位置
    // 参数：begin （提取起始处的索引），end（提取终止处的索引，但不包含end）
    // 返回值：一个含有被提取元素的新数组
    // 是否改变原数组：否
arr.splice(start, deleteCount, item1)
//13、splice
    // 功能：删除或替换现有元素或者原地添加新的元素来修改数组
    // 参数：start （指定修改的开始位置），deleteCount（要移除的数组元素的个数），items（要添加进数组的元素）
    // 返回值：由被删除的元素组成的一个数组
    // 是否改变原数组：是
arr.sort((a,b) => {})
//14、sort
//   return a-b是升序排列，b-a是降序排列
    // 功能：排序
    // 参数：可以是箭头函数，也可以是普通函数，也可以无函数
    // 返回值：排序后的数组
    // 是否改变原数组：是
arr.forEach((element, index, array) => { /* … */ })
//  15、forEach
    // 功能：遍历数组
    // 参数：可以是箭头函数，也可以是回调函数，也可以内敛回调函数
    // 返回值：undefined(主要是看里面函数的return值)
    // 是否改变原数组：否
arr.map((element, index, array) => { /* … */ })
//  16、map 
    // 功能：遍历数组，返回新数组
    // 参数：可以是箭头函数，也可以是回调函数，也可以内联回调函数
    // 返回值：一个新数组，每个元素都是回调函数的返回值
    // 是否改变原数组：否
arr.filter((element, index, array) => { /* … */ })
//  17、filter 
    // 功能：遍历数组，并筛选数据
    // 参数：可以是箭头函数，也可以是回调函数，也可以内联回调函数
    // 返回值：一个新数组，数组内，保存回调函数的返回值为true时遍历到的数据
    // 是否改变原数组：否
arr.some((element, index, array) => { /* … */ })
// 18、some  
    // 功能：遍历数组，并验证数据
    // 参数：可以是箭头函数，也可以是回调函数，也可以内联回调函数
    // 返回值：布尔值，只要有一次回调函数的返回值为true，立即结束遍历，some的返回值为true；否则为false。
    // 是否改变原数组：否
arr.every((element, index, array) => { /* … */ })
//  19、every
    // 功能：遍历数组，并验证数据
    // 参数：可以是箭头函数，也可以是回调函数，也可以内联回调函数
    // 返回值：布尔值，只要有一次回调函数的返回值为false，立即结束遍历，every的返回值为false；否则为true。
    // 是否改变原数组：否
arr.reduce((previousValue, currentValue,currentIndex,array) => { /* … */ })
//  20、reduce 
//第一种 
// 参数：回调函数，这个回调函数会执行数组的长度次，有四个形参：
    // 第一次：形参1表示数组的第一个数据
    // 之后次数：形参1表示上一次回调函数的返回值

    // 形参2，表示从数组的第二个数据开始往后遍历到的数据

    // 形参3，表示本次形参2获取到的数据的索引

    // 形参4，数组自身
    
    // 返回值：最后一次回调函数的返回值

   //------------------------------------
   //第二种
    
    // 参数：
    // 实参1：回调函数，这个回调函数会执行数组的长度次，有四个形参：
        // 第一次：形参1表示reduce的实参2
        // 之后次数：形参1表示上一次回调函数的返回值

        // 形参2，表示从数组的第一个数据开始往后遍历到的数据

        // 形参3，表示本次形参2获取到的数据的索引

        // 形参4，数组自身

    // 实参2：任意数据  
    




    
